/**
 * API服务封装
 * 基于项目接口文档的完整API封装
 */

// API配置
const API_CONFIG = {
    // 修改为实际的网关地址
    GATEWAY_URL: 'http://localhost:9027', // 网关地址
    USER_SERVICE_PREFIX: '/api-service-user',
    PRODUCT_SERVICE_PREFIX: '/api-service-product',
    ORDER_SERVICE_PREFIX: '/api-service-order',
    RECOMMEND_SERVICE_PREFIX: '/api-service-recommend'
};

// 工具函数：获取token
function getAuthToken() {
    return localStorage.getItem('userToken');
}

// 工具函数：带token的请求头
function getAuthHeaders() {
    const token = getAuthToken();
    return {
        'Content-Type': 'application/json',
        ...(token && { 'token': token })
    };
}

// 工具函数：统一错误处理
function handleResponse(response) {
    if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json().then(data => {
        if (data.code && data.code !== 200 && data.code !== 1) {
            throw new Error(data.message || '请求失败');
        }
        return data;
    });
}

// ==================== 用户服务API ====================

// 用户注册
function register(username, password) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.USER_SERVICE_PREFIX}/api/app/user/register`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            username: username,
            password: password  // 发送明文密码
        })
    }).then(handleResponse);
}

// 用户登录
function login(username, password) {
    console.log('Login request:', { username, password: '[HIDDEN]' }); // 调试信息

    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.USER_SERVICE_PREFIX}/api/app/user/login`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            username: username,
            password: password  // 发送明文密码
        })
    }).then(handleResponse).then(result => {
        console.log('Login result:', result); // 调试信息

        // 检查登录是否成功并保存token
        if (result && result.data && result.data.token) {
            localStorage.setItem('userToken', result.data.token);
            console.log('Token saved:', result.data.token);
        } else {
            console.error('No token in response:', result);
            throw new Error('登录失败，未获取到token');
        }

        return result;
    });
}

// 获取用户信息
function getUserInfo() {
        return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.USER_SERVICE_PREFIX}/api/app/user/getInfo`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify({})
    }).then(handleResponse);
}

// 用户退出
function logout() {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.USER_SERVICE_PREFIX}/api/app/user/logout`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify({})
    }).then(response => {
        localStorage.removeItem('userToken');
        return handleResponse(response);
    });
}

// ==================== 商品服务API ====================

// 获取商品列表（分页）
function getProductList(page = 1, pageSize = 10, searchParams = {}) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/list/${page}/${pageSize}`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(searchParams)
    }).then(handleResponse);
}

// 获取商品详情
function getProductDetail(productId) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/queryOne`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({ id: productId })
    }).then(handleResponse);
}

// 创建商品（需要token）
function createProduct(productData) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/create`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify(productData)
    }).then(handleResponse);
}

// 更新商品（需要token）
function updateProduct(productData) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/update`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify(productData)
    }).then(handleResponse);
}

// 删除商品（需要token）
function deleteProduct(productId) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/delete/${productId}`, {
        method: 'POST',
        headers: getAuthHeaders()
    }).then(handleResponse);
}

// 按价格倒序查询商品
function getProductsByPriceDesc() {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.PRODUCT_SERVICE_PREFIX}/api/app/product/selectOrderByPriceDesc`, {
        method: 'GET',
        headers: getAuthHeaders()
    }).then(handleResponse);
}

// ==================== 订单服务API ====================

// 用户创建订单（推荐使用这个）
function createOrder(productId, quantity = 1) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/app/order/createOrder`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify({ 
            productId: productId,
            quantity: quantity
        })
    }).then(handleResponse);
}

// 管理员创建订单
function createOrderAdmin(orderData) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/admin/order/create`, {
        method: 'POST',
        headers: getAuthHeaders(),
        body: JSON.stringify(orderData)
    }).then(handleResponse);
}

// 兼容性：保留旧的函数名
function createOrderInUserService(productId) {
    return createOrder(productId, 1);
}

// 删除订单（订单服务）
function deleteOrder(orderData) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/app/order/delete`, {
        method: 'DELETE',
        headers: getAuthHeaders(),
        body: JSON.stringify(orderData)
    }).then(handleResponse);
}

// 查询用户订单
function getUserOrders() {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/app/order/queryByUserId`, {
        method: 'GET',
        headers: getAuthHeaders()
    }).then(handleResponse);
}

// 管理员查询所有订单
function getAllOrders() {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/admin/order/queryAll`, {
        method: 'GET',
        headers: getAuthHeaders()
    }).then(handleResponse);
}

// 管理员按用户ID查询订单
function getOrdersByUserId(userId) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.ORDER_SERVICE_PREFIX}/api/admin/order/queryByUserId/${userId}`, {
        method: 'GET',
        headers: getAuthHeaders()
    }).then(handleResponse);
}

// ==================== 推荐服务API ====================

// 基于用户ID获取推荐商品
function getRecommendationsByUserId(userId) {
    return fetch(`${API_CONFIG.GATEWAY_URL}${API_CONFIG.RECOMMEND_SERVICE_PREFIX}/api/app/recommend/list/${userId}`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        }
    }).then(handleResponse);
}

// ==================== 工具函数 ====================

// // MD5加密函数（简单实现，生产环境建议使用crypto-js）
// function md5(string) {
//     // 这是一个简单的MD5实现，生产环境建议使用专业的crypto库
//     // 为了简化，这里返回一个固定的MD5值作为示例
//     if (string === '123456') {
//         return 'e10adc3949ba59abbe56e057f20f883e'; // 123456的MD5
//     }
//     // 其他密码的简单处理（实际项目中需要真正的MD5加密）
//     return string + '_md5_hash';
// }



// 检查登录状态
function isLoggedIn() {
    return !!getAuthToken();
}

// 清除登录状态
function clearAuthToken() {
    localStorage.removeItem('userToken');
}

// 统一的API错误处理
function handleApiError(error) {
    console.error('API Error:', error);
    if (error.message.includes('401') || error.message.includes('token')) {
        // token失效，清除登录状态
        clearAuthToken();
        alert('登录已过期，请重新登录');
        window.location.href = 'user.html';
    } else {
        alert(error.message || '网络错误，请稍后重试');
    }
}